const mongoose = require("./db"); // 引入数据库连接模块

// Schema，为数据库对象的集合，每个Schema会映射到mongoose中的一个collection，综艺Schema可以理解为表结构的定义。
const UserSchema = mongoose.Schema({
    name: {
        type: String, // 指定类型
        trim: true,  // 修饰符 去除空格
        required: true, // 必填项
    },
    sn: {
        type: String,
        index: true,  // 索引
        // 自定义修饰符
        set(val) {
            return val;
        },
        // maxlength: 20,//最大长度
        // minlength: 6, // 最小长度
        // match: /^sn(.*)/i, // 正则表达式，匹配以sn开头的字符串，i表示不区分大小写
        validate: function(sn) {
            // 自定义验证函数
            return /^sn(.*)/i.test(sn); // 验证sn是否以sn开头
        }
    },
    age: {
        type: Number,
        min: 0, // 最小值 用在number类型上面
        max: 150, // 最大值 用在number类型上面
        default: 18 // 默认值
    },
    status: {
        type: String,
        enum: ['0', '1', '2'], // status 的值必须在枚举数组中，注意枚举类型只能用在String类型上
        default: '1' // 默认值为1
    }
});

// 静态方法 建议别使用箭头函数 因为箭头函数 没有this
UserSchema.statics.findBySn = function(sn,cb) {
    //通过 find方法获取 sn的数据 this 关键字获取当前的model
    this.find({"sn":sn},function(err,docs){
        cb(err,docs)
    })
}

// 实例方法(基本不用)
UserSchema.methods.print = function(){
    console.log('我是一个实例方法')
    console.log(this.name)
}

module.exports = mongoose.model("User", UserSchema, "user"); // 导出模型，第三个参数为集合名称
// 注意：如果使用了mongoose的模块化方式，需要在每个文件中都连接数据库